package cn.cyh.queue_service.model.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.HashMap;
import java.util.Map;

/**
 * 分页请求参数
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PageRequest {
    
    /**
     * 页码，从1开始
     */
    @Builder.Default
    private Integer pageNum = 1;
    
    /**
     * 每页大小
     */
    @Builder.Default
    private Integer pageSize = 10;
    
    /**
     * 排序字段
     */
    private String orderBy;
    
    /**
     * 是否升序
     */
    @Builder.Default
    private Boolean isAsc = false;
    
    /**
     * 过滤条件
     */
    @Builder.Default
    private Map<String, Object> filters = new HashMap<>();
    
    /**
     * 简单构造器
     * 
     * @param pageNum 页码
     * @param pageSize 每页大小
     */
    public PageRequest(int pageNum, int pageSize) {
        this.pageNum = pageNum;
        this.pageSize = pageSize;
        this.filters = new HashMap<>();
    }
    
    /**
     * 设置是否降序排序
     * 
     * @param isDesc 是否降序
     * @return 当前对象，用于链式调用
     */
    public PageRequest setIsDesc(boolean isDesc) {
        this.isAsc = !isDesc;
        return this;
    }
    
    /**
     * 添加过滤条件（字符串类型）
     * 
     * @param key 过滤键
     * @param value 过滤值
     * @return 当前对象，用于链式调用
     */
    public PageRequest addFilter(String key, String value) {
        if (filters == null) {
            filters = new HashMap<>();
        }
        filters.put(key, value);
        return this;
    }
    
    /**
     * 添加过滤条件（整数类型）
     * 
     * @param key 过滤键
     * @param value 过滤值
     * @return 当前对象，用于链式调用
     */
    public PageRequest addFilter(String key, Integer value) {
        if (filters == null) {
            filters = new HashMap<>();
        }
        filters.put(key, value);
        return this;
    }
    
    /**
     * 添加过滤条件（长整数类型）
     * 
     * @param key 过滤键
     * @param value 过滤值
     * @return 当前对象，用于链式调用
     */
    public PageRequest addFilter(String key, Long value) {
        if (filters == null) {
            filters = new HashMap<>();
        }
        filters.put(key, value);
        return this;
    }
    
    /**
     * 添加过滤条件（布尔类型）
     * 
     * @param key 过滤键
     * @param value 过滤值
     * @return 当前对象，用于链式调用
     */
    public PageRequest addFilter(String key, Boolean value) {
        if (filters == null) {
            filters = new HashMap<>();
        }
        filters.put(key, value);
        return this;
    }
    
    /**
     * 添加通用类型过滤条件
     * 
     * @param key 过滤键
     * @param value 过滤值
     * @return 当前对象，用于链式调用
     */
    public PageRequest addFilter(String key, Object value) {
        if (filters == null) {
            filters = new HashMap<>();
        }
        filters.put(key, value);
        return this;
    }
} 